package com.smsclient.init;

import cn.hutool.core.text.csv.CsvData;
import cn.hutool.core.text.csv.CsvReader;
import cn.hutool.core.text.csv.CsvRow;
import cn.hutool.core.text.csv.CsvUtil;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Maps;
import com.smsclient.constant.GlobalConstant;
import com.smsclient.exception.BusinessException;
import com.smsclient.model.IspType;
import com.smsclient.model.base.BaseEntity;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.ResourceUtils;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.List;
import java.util.Map;

/**
 * 初始作者： Magina.Hu</br>
 * 创建日期： 2019/7/15</br>
 * 功能说明： 公共类 <br/>
 * =================================================<br/>
 * 修改记录：<br/>
 * 修改作者 日期 修改内容<br/>
 * ================================================<br/>
 * Copyright (c) 2019-2020 .All rights reserved.<br/>
 */
@Slf4j
@Component
public class CommonFacade {

    /**
     * redis工具类
     */
    @Autowired
    private RedissonClient redissonClient;

    public void initDict() throws BusinessException {
        RBucket<Map> keyObject  = redissonClient.getBucket(GlobalConstant.ISP_DICT_KEY);
        File file = null;
        try {
            file = ResourceUtils.getFile("classpath:csv/Mobile_ISP_new.csv");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            throw new BusinessException("文件找不到!");
        }
        CsvReader reader = CsvUtil.getReader();
        //从文件中读取CSV数据
        CsvData data = reader.read(file, CharsetUtil.CHARSET_GBK);
        List<CsvRow> rows = data.getRows();
        Map<String,String> map = Maps.newHashMap();
        for (CsvRow csvRow : rows) {
            //getRawList返回一个List列表，列表的每一项为CSV中的一个单元格（既逗号分隔部分）
            List<String> rawList= csvRow.getRawList();
            //csv文件格式
            map.put(rawList.get(0),IspType.getCode(rawList.get(1)));
        }
        if( ObjectUtil.isNull(keyObject.get()) || (ObjectUtil.isNotNull(keyObject.get()) && keyObject.get().entrySet().size() != map.size())){
            log.info("ISP数据有更新了!");
            keyObject.set(map);
        }
    }

    /**
     * 方法描述: [获取字典Map.]</br>
     * 初始作者: Magina<br/>
     * 创建日期: 2019年4月5日-上午11:10:42<br/>
     * 开始版本: 2.0.0<br/>
     * =================================================<br/>
     * 修改记录：<br/>
     * 修改作者 日期 修改内容<br/>
     * ================================================<br/>
     *
     * @return String 字典MapList
     *
     */
    @SuppressWarnings("unchecked")
    public String getIspDictType(String dictType) {
        Object object = this.redissonClient.getBucket(GlobalConstant.ISP_DICT_KEY).get();
        if (ObjectUtil.isNotNull(object)) {
            Map<String, String> map = (Map<String, String>) object;
            if (!map.isEmpty()) {
                return map.get(dictType);
            }
        }
        return null;
    }
    public BaseEntity freshCreateData(BaseEntity entity){
        entity.setCreateDate(GlobalConstant.NOW_DATE);
        //todo
        entity.setCreateUser("create_user");
        entity.setOperationFlag(1);
        return entity;
    }

    public BaseEntity freshUpdateData(BaseEntity entity){
        entity.setUpdateDate(GlobalConstant.NOW_DATE);
        entity.setUpdateUser("update_user");
        entity.setOperationFlag(2);
        return entity;
    }

    public Object getCurrentUser(HttpServletRequest request){
        //todo 解析token
        return null;
    }

    //todo 获取当前用户的orgId
    public String getCurrentOrgId (){
        return null;
    }


}
